<?php

class Application_Model_InformeElectricidadMensualDatacenter extends Sgit_Model
{
    protected $_name = 'informe_electricidad_mensual_datacenter';
    protected $_primary = 'id';


    function updateImputacion($id_zona,$mes_imputacion,$anio_imputacion)
    {
        
        $imputacion_proyectos=new Application_Model_InformeElectricidadMensualProyecto();
        
        $where['id_zona=?']=$id_zona;
        $where['mes=?']=$mes_imputacion;
        $where['anio=?']=$anio_imputacion;
        $this->deleteRow($where);
        
        
        $rows=$imputacion_proyectos->getAll($where);
        
        
        foreach($rows as $v)
        {
            $imp['consumo_imputable']+=$v['consumo_imputable'];
            $imp['consumo_it']+=$v['consumo_it'];
            $imp['imputacion']+=$v['imputacion'];
            $imp['superficie']+=$v['superficie'];
            
            $imp['facturacion_consumo']+=$v['facturacion_consumo'];
            
            $imp['facturacion']+=$v['facturacion'];
            
            
            if($v['modalidad_disponibilidad']==1){
                $imp['imputacion_exceso']+=$v['imputacion_exceso'];
            }
            
            if($v['modalidad_disponibilidad']==2 && $v['tipo_disponibilidad']==1 && $v['tipo_facturacion']!=7)
            {
                $imp['imputacion_disponibilidad_contratada'] += $v['imputacion_disponibilidad_contratada'];
                $imp['imputacion_disponibilidad_consumida']  += $v['imputacion_disponibilidad_consumida'];
            }
        }
        
        $imp['pue']=$imp['consumo_imputable']/$imp['consumo_it'];
        
        
        $imp['mes']=$mes_imputacion;
        $imp['anio']=$anio_imputacion;
        $imp['id_zona']=$id_zona;
        
        $fecha_imputacion = new Zend_Date();
        $fecha_imputacion->setDay(1)->setYear($anio_imputacion)->setMonth($mes_imputacion);
        
        $fecha_consumo=new Zend_Date($fecha_imputacion,Zend_Date::ISO_8601);
        $fecha_consumo->subMonth(1);
        
        $m_datacetner = new Application_Model_ConsumoDatacenter();
        $dc = $m_datacetner->getMes($id_zona, $fecha_consumo);
        
        $imp['consumo_datacenter']=$dc['consumo'];
        $imp['consumo_servicios']=$imp['consumo_datacenter']-$imp['consumo_it'];
        $imp['pue'] = round($dc['consumo'] / $imp['consumo_it'],4);
        $imp['coste'] = $dc['importe'];
        
        
        
        $id=$this->insertRow($imp);
        return $id;
    }
    
    
    function borraImputacion($id_zona,$mes_imputacion,$anio_imputacion)
    {
        $where['id_zona=?']=$id_zona;
        $where['mes=?']=$mes_imputacion;
        $where['anio=?']=$anio_imputacion;
        $this->deleteRow($where);
        
    }
        
    
    function getLastImputacion($id_zona)
    {
        $select = $this->getAdapter()->select();
        $select->from(array($this->_name))->where("id_zona = ?", $id_zona, 'INTEGER')->order(array('anio desc', 'mes desc'))->limit(1);
        return $this->getAdapter()->fetchRow($select);
    }



    function getImputacionResumen($values)
    {

        
        $select = $this->getAdapter()->select()->from(array($this->_name))->order(array('anio desc','mes desc'));
           

        if (is_numeric($values['id_zona']))
            $select->where("id_zona= ?", $values['id_zona']);
        if (is_numeric($values['mes']))
            $select->where("mes= ?", $values['mes']);
        if (is_numeric($values['anio']))
            $select->where("anio= ?", $values['anio']);


        $rows= $this->getAdapter()->fetchAll($select);
        
        foreach($rows as &$row1)
        {


            $fecha = new Zend_Date();
			$fecha->setDay(18)->setMonth($row1['mes'])->setYear($row1['anio']);
			
            $row1['fecha'] = $fecha->get('MMM-yyyy');
            
            $fecha->subMonth(1);
    
            $row1['fecha_consumo'] = $fecha->get(Zend_Date::ISO_8601);
            $row1['potencia_it'] = Sgit_Util_Potencia::run($row1['consumo_it'], $fecha);
            $row1['potencia_servicios'] = Sgit_Util_Potencia::run($row1['consumo_servicios'], $fecha);
            $row1['potencia_datacenter'] = Sgit_Util_Potencia::run($row1['consumo_datacenter'], $fecha);
           
           
            $row2 = $this->getRow(array('id_zona = ?' => $row1['id_zona'], 'mes = ?' => $fecha->get('M'), 'anio = ?' => $fecha->get('yyyy')));

                    
            if($row2)
            {
                $fecha->subMonth(1);
                $row2['potencia_datacenter'] = Sgit_Util_Potencia::run($row2['consumo_datacenter'], $fecha);
            }
            
             
            if ($row2['potencia_datacenter'])
                $row1['incremento'] = round(100 * ($row1['potencia_datacenter'] - $row2['potencia_datacenter']) / ($row2['potencia_datacenter']), 2);
            else
                $row1['incremento'] = null;
    
  
            $row1['facturado_compania']= $row1['coste'];
            
                         
            if($row1['coste']) 
                $row1['ratio_reventa'] = 100*(($row1['facturacion'] / $row1['coste'])-1);
            
            
            
        }
        


        return $rows;
        
        
    }
    
    
    function getImputacion($id)
    {

        $row1 = $this->getRow($id);
        
        $fecha = new Zend_Date();
		$fecha->setDay(1)->setMonth($row1['mes'])->setYear($row1['anio']);
		
		
        $row1['fecha_imputacion'] = $fecha->get(Zend_Date::ISO_8601);
    
        $fecha->subMonth(1);

        $row1['fecha_consumo'] = $fecha->get(Zend_Date::ISO_8601);
        

        $row1['potencia_it'] = Sgit_Util_Potencia::run($row1['consumo_it'], $fecha);
        $row1['potencia_servicios'] = Sgit_Util_Potencia::run($row1['consumo_servicios'], $fecha);
        $row1['potencia_total'] = Sgit_Util_Potencia::run($row1['consumo_datacenter'], $fecha);

        $row2 = $this->getRow(array('id_zona = ?' => $row1['id_zona'], 'mes = ?' => $fecha->get(Zend_Date::MONTH_SHORT), 'anio = ?' => $fecha->get(Zend_Date::YEAR)));
        
        $fecha2 = new Zend_Date();
		$fecha2->setDay(1)->setMonth($row2['mes'])->setYear($row2['anio'])->sub(1, Zend_Date::MONTH);


        $row2['potencia_total'] = Sgit_Util_Potencia::run($row2['consumo_datacenter'], $fecha2);

        if ($row2['potencia_total'])
            $row1['incremento'] = round(100 * ($row1['potencia_total'] - $row2['potencia_total']) / ($row2['potencia_total']), 2);
        else
            $row1['incremento'] = null;

         
        if($row1['coste']) 
            $row1['ratio_reventa'] = 100*(($row1['facturacion'] / $row1['coste'])-1);
        
        $row1['previous_id']=$row2['id'];

        return $row1;
    }
    
    
    
    
    
    function getComite($cambio_aceptado,$fecha_peticion_cambio,$propone=null)
    {
       
        
        $select = $this->getAdapter()->select();
        $select->from(array($this->_name))->where("objeto_cambio = 1 ");
        

        if($cambio_aceptado){
             $select->where("cambio_aceptado = ?",$cambio_aceptado);
        }else{
             $select->where("cambio_aceptado IS NULL OR cambio_aceptado='VISTO'");
        }
           
           
           
        if(!is_null($propone))
        {
            $select->where("created_by = ?",$propone,INTEGER);
        }
        
        
        
        Sgit_Util_dateRange::run($select,$fecha_peticion_cambio,'created_on');
        

        return $this->getAdapter()->fetchAll($select);

    }


    public function changeComite($id, $valor,$notas)
    {
        
        $row=$this->getRow($id);
        

        
        switch($valor){
            case 'SI':
                $update['publicado'] = 1;
                $update['fecha_publicacion']=date('Y-m-d');
                $update['cambio_aceptado']=$valor;
                break;
            case 'VISTO':
                $update['publicado'] = 0;
                $update['fecha_publicacion']=null;
                $update['cambio_aceptado']=$valor;
                break;
            default:
                $update['publicado'] = 0;
                $update['fecha_publicacion']=null;
                $update['cambio_aceptado']=$valor;

        }
        
        
        

        $update['responde_cambio']=$this->_auth->getIdentity()->id;
        $update['notas_cambio']=$notas;
        
        
        $result= $this->updateRow($update,$id);

        if($result['status']=='ok'){
            
            $fecha=new Zend_Date();
            $fecha->setDay(1)->set($row['mes'],Zend_Date::MONTH_SHORT)->set($row['anio'],Zend_Date::YEAR);
            
            /*
            *Envio correo administrativos
            */

            if($valor=='SI')
            {
                $msg='Ya está disponible en Viriathus  la imputación y facturación de electricidad correspondiente a '.$fecha->toString('MMMM yyyy') .' de '.Sgit_Cache::single()->model('Datacenter')->getKey($row['id_zona']); 
                $msgadmin['asunto'] = 'Imputación/Facturación Electricidad '.$fecha->toString('MMMM yyyy').' '.Sgit_Cache::single()->model('Datacenter')->getKey($row['id_zona']);
                $msgadmin['body'] = $msg;
                $msgadmin['destinatarios']=Sgit_Util_UserByGroup::run(53);
                $msgadmin['destinatariosCC'] = array($row['created_by'],34,179);
                $msgadmin['id_zona'] = $row['id_zona'];
                $msgadmin['tipo'] = 'Otros';
                $msgadmin['de'] = $this->_auth->getIdentity()->id;

				$mail=new Sgit_Mail();
				$mail->sendMsg($msgadmin);
            }

            if($valor=='NO')
            {
                $entrada['asunto'] = 'Comite de Cambio';
                $entrada['body'] = "Rechazada Imputación/Facturación ".$fecha->toString('MMMM yyyy') .' de '.Sgit_Cache::single()->model('Datacenter')->getKey($row['id_zona']); 
                $entrada['body'] .="<br><br>Comentarios del Comite:<br>$notas</b>";
                $entrada['destinatarios'] = array($row['created_by']);
                $entrada['destinatariosCC'] = array(34);
                $entrada['id_zona'] = $row['id_zona'];
                $entrada['tipo'] = 'Otros';
                $entrada['de'] = $this->_auth->getIdentity()->id;
                
                $mail=new Sgit_Mail();
		  	    $mail->sendMsg($entrada);
            }
            
            if($valor=='VISTO')
            {
                $entrada['asunto'] = 'Comite de Cambio';
                $entrada['body'] = "Aplazado Imputación/Facturación ".$fecha->toString('MMMM yyyy') .' de '.Sgit_Cache::single()->model('Datacenter')->getKey($row['id_zona']); 
                $entrada['body'] .="<br><br>Comentarios del Comite:<br>$notas</b>";
                $entrada['destinatarios'] = array($row['created_by']);
                $entrada['destinatariosCC'] = array(34);
                $entrada['id_zona'] = $row['id_zona'];
                $entrada['tipo'] = 'Otros';
                $entrada['de'] = $this->_auth->getIdentity()->id;
                
                $mail=new Sgit_Mail();
		  	    $mail->sendMsg($entrada);
            }
            
            
          
            return array('status'=>'ok');
        }else {
            return array('status'=>'ko');
        }
        

    }

    public function getFacturacionElectricidadSgit($idZona,$anio)
    {
        if (is_numeric($idZona))
        {
            $select = $this->getAdapter()->select();
            $select->from(array($this->_name), array('estimado' => 'facturacion', 'mes'));
            $select->where('anio = ?', $anio);
            $select->where('id_zona = ?', $idZona);
            $select->order('mes');
        } elseif (is_array($idZona))
        {
            $select = $this->getAdapter()->select();
            $select->from(array($this->_name), array('estimado' => new Zend_Db_Expr("ROUND(SUM(facturacion),2)"), 'mes'));
            $select->where('anio = ?', $anio);
            $select->where('id_zona IN(?)', $idZona);
            $select->group(array('anio', 'mes'));
        }

        $facturacion = $this->getAdapter()->fetchAll($select);
        $filas = $this->assocArray2($facturacion, 'mes');

        for ($i = 1; $i < 13; $i++)
        {


            $fila[$i]['nombre'] = 'Facturación Electricidad SGIT';
            $fila[$i]['id_zona'] = $this->idZona;
            $fila[$i]['estimado'] = $filas[$i]['estimado'];
            $fila[$i]['presupuesto'] = $filas[$i]['estimado'];

            $f['acumulado_presupuesto'] += $filas[$i]['estimado'];
            $fila[$i]['acumulado_presupuesto'] = round($f['acumulado_presupuesto'], 2);

            $f['acumulado_estimado'] += $filas[$i]['estimado'];
            $fila[$i]['acumulado_estimado'] = round($f['acumulado_estimado'], 2);
        }


        return $fila;
    }



    
    
}
